﻿using System;
using System.Text;
using System.Collections.Generic;
using System.Linq;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using Guoc.Web.Controllers;
using Guoc.DAL;
using Guoc.DAL.Domain;
using Guoc.DAL.Interface;
using Moq;
using System.Web.Mvc;
using System.Web;
using Guoc.Web.Biz;
namespace Guoc.Web.Test.ControllerTest
{
    /// <summary>
    /// RoleTest 的摘要说明
    /// </summary>
    [TestClass]
    public class RoleTest
    {
        public RoleTest()
        {
            //
            //TODO: 在此处添加构造函数逻辑
            //
        }

        private TestContext testContextInstance;

        /// <summary>
        ///获取或设置测试上下文，该上下文提供
        ///有关当前测试运行及其功能的信息。
        ///</summary>
        public TestContext TestContext
        {
            get
            {
                return testContextInstance;
            }
            set
            {
                testContextInstance = value;
            }
        }

        #region 附加测试特性
        //统一定义变量
        Mock<RoleBiz> mockRoleBiz;
        int page =1;
        int rows =10;

        //
        // 编写测试时，可以使用以下附加特性:
        //
        // 在运行类中的第一个测试之前使用 ClassInitialize 运行代码
        //[ClassInitialize()]
        //public static void MyClassInitialize(TestContext testContext) {
        //    //初始化基本数据
           
        //}
        //
        // 在类中的所有测试都已运行之后使用 ClassCleanup 运行代码
        // [ClassCleanup()]
        // public static void MyClassCleanup() { }
        //
        // 在运行每个测试之前，使用 TestInitialize 来运行代码
        // [TestInitialize()]
        public void MyTestInitialize() {
            mockRoleBiz = new Mock<RoleBiz>();
        }
        //
        // 在每个测试运行完之后，使用 TestCleanup 来运行代码
        // [TestCleanup()]
        // public void MyTestCleanup() { }
        //
        #endregion

        [TestMethod]
        public void GetRoleList_Should_return_Json_Role_List_and_Role_Total()
        {
            //返回Json数据格式:{total=2,rows=list}
            
            //模拟返回的记录
          
            //List<Role> list = new List<Role>();
            //list.Add(new Role(){ RoleID="1", RoleName="管理员",Remark="管理员"});
            //list.Add(new Role(){ RoleID="2", RoleName="系统管理员",Remark="系统管理员"});
            //int count=0;
            //mockRoleBiz.Setup(r => r.GetRoleList(page, rows,out count)).Returns(list);
           
            ////模拟返回
            //RoleController rc = new RoleController(mockRoleBiz.Object);
            //Assert.IsNotNull(rc);

            ////调用
            //var result = rc.GetRoleList(1,10);
            //Assert.IsInstanceOfType(result, typeof(JsonResult));
            //JsonResult json = (JsonResult)result;
            //Assert.IsNotNull(json.Data);


            //mockRoleBiz.VerifyAll();
        }

      

        [TestMethod]
        public void Create_return_json_if_save_a_role_success()
        { 
            //返回json格式 {code=1,message="添加成功"}
           // Role role = new Role();
           // role.RoleID = Guid.NewGuid().ToString();
           // role.RoleName="管理员";
           // role.Remark="管理员";
           // mockRoleBiz.Setup(r => r.Create(role)).Returns(true);
           // RoleController rc = new RoleController(mockRoleBiz.Object);

           //var result=  rc.Create("管理员","管理员");
           //Assert.IsInstanceOfType(result, typeof(JsonResult));

        }

       
        [TestMethod]
        public void Edit_return_sucess_save_a_role()
        {
           
            //Role role = new Role();
            //role.RoleID = Guid.NewGuid().ToString();
            //role.RoleName = "管理员2";
            //role.Remark = "管理员2";
            //mockRoleBiz.Setup(r => r.Update(role)).Returns(true);
            //RoleController rc = new RoleController(mockRoleBiz.Object);
            //var result = rc.Edit(role.RoleID,role.RoleName,role.Remark);

            //Assert.IsInstanceOfType(result, typeof(JsonResult));
        }

        [TestMethod]
        public void Delete_return_true_if_id_is_exists()
        {
            
            //Role role = new Role();
            //role.RoleID = Guid.NewGuid().ToString();
            //mockRoleBiz.Setup(r => r.Delete(role)).Returns(true);
            //RoleController rc = new RoleController(mockRoleBiz.Object);
            //var result = rc.Delete(role.RoleID);
            //Assert.IsInstanceOfType(result, typeof(JsonResult));
        }
        //[TestMethod]
        //public void Detials_return_a_role_if_id_is_exists()
        //{
        //    var mockIRole = new Mock<IRole>();
        //    Role role = new Role();
        //    role.RoleID = Guid.NewGuid().ToString();
        //    role.RoleName = "管理员";
        //    role.Remark = "系统管理员";
        //    mockIRole.Setup(r => r.Get(role.RoleID)).Returns(role);
        //    RoleController rc = new RoleController(mockRoleBiz.Object);

        //    var result = rc.Details(role.RoleID);

        //    Assert.IsInstanceOfType(result, typeof(JsonResult));
        //}
    }
}
